<!doctype html>
<html lang="zh-cn">
  <head>
    <title>Python--面向对象(2) // JW Blog</title>
    <meta charset="utf-8" />
    <meta name="generator" content="Hugo 0.60.1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="John Doe" />
    <meta name="description" content="" />
    <link rel="stylesheet" href="https://duyi111.gitee.io/css/main.min.f90f5edd436ec7b74ad05479a05705770306911f721193e7845948fb07fe1335.css" />

    
    <meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Python--面向对象(2)"/>
<meta name="twitter:description" content="1.继承的介绍  概念  自定义类中,其类继承了另一个类 B-&gt;A  B类是A类的子类(派生类) A类是B类的父类(基类)     作用:  如果子类继承了父类,子类就继承了父类的属性和方法 站在之类的角度,简化了子类的设置,提高开发效率,便于后期维护升级    2.单继承  概念: 子类只是继承了一个父类 格式: class 子类名(父类名): pass  作用:  如果子类继承了父类,子类就继承了父类的属性和方法    3.多继承   概念: 子类继承了多个父类
  格式:
class 子类名(父类1, 父类2, ...): pass   如果子类继承了多个父类
 如果多个父类的方法名不同:其子类会全部继承 如果多个父类的方法名相同: 其子类会继承第一个父类 为什么子类会继承第一个父类的属性?  因为继承了第一个父类的init方法引起的      注意:
 如果通过一个类创建一个对象,必须要执行init方法或执行自己类中的或者执行父类的或者执行object    4.子类重写父类的同名属性和方法  如果子类继承了父类, 但是父类中的方法不能满足子类的需求,子类可以通过重写父类的方法或者属性来解决这个问题 子类调用方法的顺序  首先找本类 然后找第一个父类 然后找第二个 最后找object 如果没有将报错   注意:  如果想查看一个类创建对象调用方法或者属性的顺序 类名."/>

    <meta property="og:title" content="Python--面向对象(2)" />
<meta property="og:description" content="1.继承的介绍  概念  自定义类中,其类继承了另一个类 B-&gt;A  B类是A类的子类(派生类) A类是B类的父类(基类)     作用:  如果子类继承了父类,子类就继承了父类的属性和方法 站在之类的角度,简化了子类的设置,提高开发效率,便于后期维护升级    2.单继承  概念: 子类只是继承了一个父类 格式: class 子类名(父类名): pass  作用:  如果子类继承了父类,子类就继承了父类的属性和方法    3.多继承   概念: 子类继承了多个父类
  格式:
class 子类名(父类1, 父类2, ...): pass   如果子类继承了多个父类
 如果多个父类的方法名不同:其子类会全部继承 如果多个父类的方法名相同: 其子类会继承第一个父类 为什么子类会继承第一个父类的属性?  因为继承了第一个父类的init方法引起的      注意:
 如果通过一个类创建一个对象,必须要执行init方法或执行自己类中的或者执行父类的或者执行object    4.子类重写父类的同名属性和方法  如果子类继承了父类, 但是父类中的方法不能满足子类的需求,子类可以通过重写父类的方法或者属性来解决这个问题 子类调用方法的顺序  首先找本类 然后找第一个父类 然后找第二个 最后找object 如果没有将报错   注意:  如果想查看一个类创建对象调用方法或者属性的顺序 类名." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://duyi111.gitee.io/post/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A12/" />
<meta property="article:published_time" content="2020-01-11T21:57:04+08:00" />
<meta property="article:modified_time" content="2020-01-11T21:57:04+08:00" />


  </head>
  <body>
    <header class="app-header">
      <a href="https://duyi111.gitee.io/"><img class="app-header-avatar" src="/avatar.jpg" alt="John Doe" /></a>
      <h1>JW Blog</h1>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vehicula turpis sit amet elit pretium.</p>
      <div class="app-header-social">
        
      </div>
    </header>
    <main class="app-container">
      
  <article class="post">
    <header class="post-header">
      <h1 class ="post-title">Python--面向对象(2)</h1>
      <div class="post-meta">
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-calendar">
  <title>calendar</title>
  <rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>
</svg>
          Jan 11, 2020
        </div>
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-clock">
  <title>clock</title>
  <circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>
</svg>
          1 min read
        </div></div>
    </header>
    <div class="post-content">
      <h2 id="1">1.继承的介绍</h2>
<ul>
<li>概念
<ul>
<li>自定义类中,其类继承了另一个类 B-&gt;A
<ul>
<li>B类是A类的子类(派生类)</li>
<li>A类是B类的父类(基类)</li>
</ul>
</li>
</ul>
</li>
<li>作用:
<ul>
<li>如果子类继承了父类,子类就继承了父类的属性和方法</li>
<li>站在之类的角度,简化了子类的设置,提高开发效率,便于后期维护升级</li>
</ul>
</li>
</ul>
<h2 id="2">2.单继承</h2>
<ul>
<li>概念: 子类只是继承了一个父类</li>
<li>格式:
<pre><code>class 子类名(父类名):
    pass
</code></pre></li>
<li>作用:
<ul>
<li>如果子类继承了父类,子类就继承了父类的属性和方法</li>
</ul>
</li>
</ul>
<h2 id="3">3.多继承</h2>
<ul>
<li>
<p>概念: 子类继承了多个父类</p>
</li>
<li>
<p>格式:</p>
<pre><code>class 子类名(父类1, 父类2, ...):
    pass
</code></pre></li>
<li>
<p>如果子类继承了多个父类</p>
<ul>
<li>如果多个父类的方法名不同:其子类会全部继承</li>
<li>如果多个父类的方法名相同: 其子类会继承第一个父类</li>
<li>为什么子类会继承第一个父类的属性?
<ul>
<li>因为继承了第一个父类的init方法引起的</li>
</ul>
</li>
</ul>
</li>
<li>
<p>注意:</p>
<ul>
<li>如果通过一个类创建一个对象,必须要执行init方法或执行自己类中的或者执行父类的或者执行object</li>
</ul>
</li>
</ul>
<h2 id="4">4.子类重写父类的同名属性和方法</h2>
<ul>
<li>如果子类继承了父类, 但是父类中的方法不能满足子类的需求,子类可以通过重写父类的方法或者属性来解决这个问题</li>
<li>子类调用方法的顺序
<ul>
<li>首先找本类</li>
<li>然后找第一个父类</li>
<li>然后找第二个</li>
<li>最后找object</li>
<li>如果没有将报错</li>
</ul>
</li>
<li>注意:
<ul>
<li>如果想查看一个类创建对象调用方法或者属性的顺序
<pre><code>类名.__mro__
</code></pre></li>
</ul>
</li>
</ul>
<h2 id="5">5.子类调用父类同名属性和方法</h2>
<ul>
<li>场景
<ul>
<li>子类继承了父类</li>
<li>因为父类不能满足之类的需求,子类重写了父类的方法</li>
<li>但是子类还想调用父类的同名方法</li>
</ul>
</li>
<li>解决方法
<pre><code>父类名.同名方法名(self)
</code></pre><pre><code>super(子类名, self).同名方法名()
# 调用父类的方法的顺序是遵循类的继承链
</code></pre><pre><code>super().同名方法名()
# 等价于super(子类名, self).同名方法名()
</code></pre></li>
</ul>
<h2 id="6">6.多层继承</h2>
<pre><code># 古法师傅类
# 单继承
class Master(object):
    pass

# 现代师傅类
# 单继承
class School(object):
    pass
    
# 徒弟类
# 多继承
class Prentice(Master, School):
    pass

# 徒弟徒弟类
# 单继承(多层继承)
class PrenticePrentice(Prentice):
    pass
</code></pre>
    </div>
    <div class="post-footer">
      
    </div>
  </article>

    </main>
  </body>
</html>
